#pragma once

// Copyright (c) 2010 Manuel Peinado Gallego <manuel.peinado@gmail.com>
// Distributed under the MIT license

// NodeEvent.h : interface of the NodeEvent and NodeListener classes
//

class Node;
class NodeManager;

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

class NodeEvent
{
public:
    
    enum Type
    {
        NodeRemoved,
        NodeAdded,
        NodeParentChanged,
        NodePropertyChanged,
        OtherType
    };

    enum Property
    {
        NodeShader,
        NodeMaterial,
        NodeTexture,
        NodeGeometry,
        NodeTransform,
            NodeOrientation,
            NodePosition,
            NodeScale,
        LightNodeParam,
        OtherProperty
    };

    NodeEvent(Type type=OtherType, Property property_=OtherProperty)
        : type(type), property_(property_)
    {
    }

    NodeManager* manager;
    Node* node;
    int type;
    int property_;
};


class NodeListener 
{
public:
    virtual void onNodeEvent(const NodeEvent&) { }
};
